const express = require('express');
const bodyParser = require('body-parser');
const fs = require('fs');
const path = require('path');

const app = express();
const PORT = 3000;

// 使用 body-parser 解析 JSON 请求体
app.use(bodyParser.json());

// 静态文件服务（用于提供 HTML 页面）
app.use(express.static('public'));

// 保存网址数据并生成 index.html 文件
app.post('/save-url', (req, res) => {
    const { url, name, description } = req.body;

    // 读取现有数据（如果存在）
    const dataFilePath = path.join(__dirname, 'data.json');
    let existingData = [];
    if (fs.existsSync(dataFilePath)) {
        existingData = JSON.parse(fs.readFileSync(dataFilePath, 'utf-8'));
    }

    // 添加新数据
    existingData.push({ url, name, description });

    // 写入数据到 data.json
    fs.writeFileSync(dataFilePath, JSON.stringify(existingData, null, 2));

    // 生成 index.html 文件
    const htmlContent = generateHTML(existingData);
    const indexFilePath = path.join(__dirname, 'public', 'index.html');
    fs.writeFileSync(indexFilePath, htmlContent);

    res.json({ message: '网址已保存，index.html 已生成！' });
});

// 生成 index.html 内容
function generateHTML(data) {
    let html = `<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>网址导航</title>
    <script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-gray-100 p-8">
    <h1 class="text-3xl font-bold text-center mb-8">网址导航首页</h1>
    <div class="container mx-auto">
        <ul class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">`;

    data.forEach(item => {
        html += `
            <li class="bg-white p-6 rounded-lg shadow-lg">
                <h3 class="text-xl font-bold"><a href="${item.url}" class="text-blue-500 hover:underline">${item.name}</a></h3>
                <p class="text-gray-600 mt-2">${item.description}</p>
            </li>`;
    });

    html += `
        </ul>
    </div>
</body>
</html>`;

    return html;
}

// 启动服务器
app.listen(PORT, () => {
    console.log(`服务器已启动，访问地址：http://localhost:${PORT}`);
});
